package IO;

import java.sql.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

import domein.*;

/** 
 * 
 * @author Team 4 - IEV2A Hogeschool utrecht
 *
 * Dit is de klasse DatabaseIO.
 * Deze klasse gaat de verbinding met de database verzorgen. Alles wat in of uit de database gaat, gaat via deze klasse.
 */

public class DatabaseIO {
	Connection con;

	/**
	 * In de constructor word de driver geladen en de connectie met de database gemaakt.
	 */
	
	public DatabaseIO() {
		try{
			Class.forName("com.mysql.jdbc.Driver");
		}
		catch (Exception e){
			System.out.println("Kan driver niet laden");
			return;
		}
		try {
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/huos", "root", "");
		} catch (SQLException e) {
			e.printStackTrace();
		} 
	}
	
	/**
	 * Functie om een student toe te voegen in de database.
	 * Vanaf de servlet "VoegStudentToeServlet" worden de gegevens opgehaald uit een formulier.
	 * Deze gegevens worden in een Student object gezet en naar deze functie toegestuurd.
	 * @param s - Student object
	 */
	
	public void voegStudentToe(Student s){
		String voornaam = s.getVoornaam();
		String achternaam = s.getAchternaam();
		String opleiding = s.getOpleiding();
		String email = s.getEmail();
		String wachtwoord = s.getWachtwoord();		
		try{
		
		Statement stmt = con.createStatement();
		stmt.executeUpdate("INSERT INTO profiel(email, wachtwoord, rol) " +
				"VALUES('"+email+"', '"+wachtwoord+"', 'student')");	
		stmt.executeUpdate("INSERT INTO student(voornaam, achternaam, opleiding, email) " +
				"VALUES('"+voornaam+"', '"+achternaam+"', '"+opleiding+"', '"+email+"')");	     
		
		
	     stmt.close();  
	}
	catch (SQLException e){
		System.out.println("Student kon niet toegevoegd worden. Reden: "+ e.toString());
	}
}
	/**
	 * Functie om de gegevens van een student te wijzigen.
	 * Binnen deze functie staat het email adres vast, deze kan niet aangepast worden.
	 * De richting die de student studeert kan ook niet aangepast worden, dit staat ook vast.
	 * @param s - Student object
	 */
	
	public void wijzigStudentGegevens(Student s){
		String voornaam = s.getVoornaam();
		String achternaam = s.getAchternaam();
		String email = s.getEmail();		
		try{
		
		Statement stmt = con.createStatement();
		stmt.executeUpdate("UPDATE student SET voornaam='"+voornaam+"', achternaam='"+achternaam+"' where email='"+email+"'");
		
		
	     stmt.close();  
	}
	catch (SQLException e){
		System.out.println("Student kon niet aangepast worden. Reden: "+ e.toString());
	}
}
	
	public void wijzigBegeleiderGegevens(Begeleider b){
		String voornaam = b.getVoornaam();
		String achternaam = b.getAchternaam();
		String email = b.getEmail();		
		try{
		
		Statement stmt = con.createStatement();
		stmt.executeUpdate("UPDATE begeleider SET voornaam='"+voornaam+"', achternaam='"+achternaam+"' where email='"+email+"'");
		
		
	     stmt.close();  
	}
	catch (SQLException e){
		System.out.println("Begeleider kon niet aangepast worden. Reden: "+ e.toString());
	}
}
	
	/**
	 * Functie om een begeleider toe te voegen in de database.
	 * Vanaf de servlet "VoegBegeleiderToeServlet" worden de gegevens opgehaald uit een formulier.
	 * Deze gegevens worden in een Begeleider object gezet en naar deze functie toegestuurd.
	 * @param b - Begeleider object
	 */
	
	public void voegBegeleiderToe(Begeleider b){
		String voornaam = b.getVoornaam();
		String achternaam = b.getAchternaam();
		String afdeling = b.getAfdeling();
		String email = b.getEmail();
		String wachtwoord = b.getWachtwoord();
		
		try{
		
		Statement stmt = con.createStatement();
		stmt.executeUpdate("INSERT INTO profiel(email, wachtwoord,  rol) " +
				"VALUES('"+email+"', '"+wachtwoord+"', 'begeleider')");
		stmt.executeUpdate("INSERT INTO begeleider(voornaam, achternaam, afdeling, email) " +
				"VALUES('"+voornaam+"', '"+achternaam+"', '"+afdeling+"', '"+email+"')");	     
		
	
	     stmt.close();  
	}
	catch (Exception e){
		System.out.println("Begeleider kon niet toegevoegd worden. Reden: "+ e.toString());
	}
}
	
	public void voegOnderzoekToe(Onderzoek o){
		String onderwerp = o.getOnderwerp();
		String omschrijving = o.getOmschrijving();
		int status = o.getStatus();
		int aantal = o.getAantal();
		String mail = o.getEmail();
		String opdrachtgever = o.getOpdrachtgever();
		String richting = o.getRichting();
		try{
			
			Statement stmt = con.createStatement();
			stmt.executeUpdate("INSERT INTO onderzoek(onderwerp, omschrijving, status, email, aantal, opdrachtgever, richting) " +
					"VALUES('"+onderwerp+"', '"+omschrijving+"', '"+status+"','"+mail+"', '"+aantal+"','"+opdrachtgever+"', '"+richting+"')");
	}
		catch (Exception e){
			System.out.println("Onderzoek kon niet toegevoegd worden. Reden: "+ e.toString());
		}
	}
	
	/** 
	 * Functie die kijkt wat voor rol iemand heeft. Dit kan zijn: Student, Begeleider of Coordinator.
	 * @param ingelogdEmail Waarde die doorgegeven word waar op gezocht gaat worden naar de rol.
	 * @return geeft de rol terug als String.
	 */
	public String getRol(String ingelogdEmail){
	String rol = "";
	try{
		Statement stmt = con.createStatement();
		//System.out.println(ingelogdEmail);
		ResultSet rs = stmt.executeQuery("SELECT * FROM profiel where email='"+ingelogdEmail+"'");
		while(rs.next()){
			rol = (rs.getString("rol"));
		}
	}
		catch(SQLException e){
			System.out.println("rol kon niet opgehaald worden. Reden: "+e.toString());
		}
	
		return rol;
		}

	
	/**
	 * Functie om in te loggen.
	 * Van uit de "LoginServlet" worden het email en wachtwoord doorgestuurd naar deze functie.
	 * De functie gaat kijken of deze combinatie gevonden word in de database en geeft dan true of false terug.
	 * @param email			- Email adres
	 * @param wachtwoord	- Wachtwoord
	 * @return				- (Boolean b)Geeft true of false terug
	 */
	
	public boolean login(String email, String wachtwoord){
		boolean b = false;
		try {
			Statement stmt = con.createStatement(); 
			ResultSet rs = stmt.executeQuery("SELECT * FROM profiel");
			while(rs.next()) { 
				String mailCheck = (rs.getString("email"));
				if(email.equals(mailCheck)){
					String wwCheck = (rs.getString("wachtwoord"));
					if(wachtwoord.equals(wwCheck)){
						b = true;
					}
				}
			}
			return b;
		}
		catch(Exception e){
			return b;
		}

	}
	/**
	 * Deze functie geeft een lijst met begeleiders terug
	 * @return ArrayList begeleiders
	 */
	
	
	public ArrayList<Begeleider> listBegeleiders() {
		ArrayList<Begeleider> b = new ArrayList<Begeleider>();
		String wachtwoord ="";
		try {
			Statement stmt = con.createStatement(); 
			//gegevens ophalen van de begeleider
			ResultSet rs = stmt.executeQuery("SELECT * FROM begeleider");
			while(rs.next()){
				String vNaam = (rs.getString("voornaam"));
				String aNaam = (rs.getString("achternaam"));
				String afdeling = (rs.getString("afdeling"));
				String email = (rs.getString("email"));
				//Wachtwoord word niet opgehaald omdat deze niet van toepassing is hier.
				Begeleider beg = new Begeleider(vNaam, aNaam, afdeling, email, wachtwoord);
				b.add(beg);
			}
		} catch (SQLException e) {
			System.out.println("Lijst begeleiders ophalen gefaald.");
		}
		return b; 
	}
	
	/**
	 * Functie om een lijst met groepen op te halen
	 * @return ArrayList groepen
	 */
	
	public ArrayList<Groep> listGroepen() {
		ArrayList<Groep> groepenlijst = new ArrayList<Groep>();
		try {
			Statement stmt = con.createStatement(); 
			//gegevens ophalen van de groep
			ResultSet rs = stmt.executeQuery("SELECT * FROM groep");
			while(rs.next()){
				int gId = (rs.getInt("groepid"));
				String email = (rs.getString("email"));
				int oId = (rs.getInt("onderzoekid"));
				int verzoek = (rs.getInt("verzoek"));
				Groep g = new Groep(gId, oId, verzoek, email);
				groepenlijst.add(g);
			}
		} catch (SQLException e) {
			System.out.println("Lijst groepen ophalen gefaald.");
		}
		return groepenlijst; 
	}
	
	/**
	 * Functie om een lijst met studenten op te halen
	 * @return ArrayList studenten
	 */
	public ArrayList<Student> listStudenten() {
		ArrayList<Student> stud = new ArrayList<Student>();
		String wachtwoord ="";
		try {
			Statement stmt = con.createStatement(); 
			//gegevens ophalen van de begeleider
			ResultSet rs = stmt.executeQuery("SELECT * FROM student");
			while(rs.next()){
				String vNaam = (rs.getString("voornaam"));
				String aNaam = (rs.getString("achternaam"));
				String opleiding = (rs.getString("opleiding"));
				String email = (rs.getString("email"));
				//Wachtwoord word niet opgehaald omdat deze niet van toepassing is hier.
				Student s = new Student(vNaam, aNaam, opleiding, email, wachtwoord);
				stud.add(s);
			}
		} catch (SQLException e) {
			System.out.println("Lijst begeleiders ophalen gefaald.");
		}
		return stud; 
	}
	
	public ArrayList<Inschrijving> listInschrijvingen() {
		ArrayList<Inschrijving> ins = new ArrayList<Inschrijving>();
		try {
			Statement stmt = con.createStatement(); 
			ResultSet rs = stmt.executeQuery("SELECT * FROM inschrijving");
			while(rs.next()){
				int iId = (rs.getInt("inschrijvingid"));
				String email = (rs.getString("email"));
				Date datum = (rs.getDate("datum"));
				Date acceptDate = (rs.getDate("acceptdatum"));
				int oId = (rs.getInt("onderzoekid"));
				String opleiding = (rs.getString("opleiding"));
				int status = (rs.getInt("status"));
				Inschrijving i = new Inschrijving(iId, email, datum, acceptDate, oId, opleiding, status);
				ins.add(i);
			}
		} catch (SQLException e) {
			System.out.println("Lijst inschrijvingen ophalen gedaald, reden: "+e.toString());
		}
		return ins; 
	}
	
	/**
	 * Functie om een lijst met onderzoeken op te halen
	 * @return ArrayList onderzoeken
	 */
	public ArrayList<Onderzoek> listOnderzoeken() {
		ArrayList<Onderzoek> ond = new ArrayList<Onderzoek>();
		try {
			Statement stmt = con.createStatement(); 
			//gegevens ophalen van de begeleider
			ResultSet rs = stmt.executeQuery("SELECT * FROM onderzoek");
			while(rs.next()){
				int oId = (rs.getInt("onderzoekid"));
				String onderwerp = (rs.getString("onderwerp"));
				String omschrijving = (rs.getString("omschrijving"));
				int status = (rs.getInt("status"));
				int aantal = (rs.getInt("aantal"));
				String mail = (rs.getString("email"));
				String opdrachtgever = (rs.getString("opdrachtgever"));
				String richting = (rs.getString("richting"));
				Onderzoek o = new Onderzoek(oId, onderwerp, omschrijving, mail, opdrachtgever, richting, status, aantal);
				ond.add(o);
			}
		} catch (SQLException e) {
			System.out.println("Lijst onderzoeken ophalen gefaald."+e.toString());
		}
		return ond; 
	}
	
	public void wijsBegeleiderToe(int onderzoekId, String mail){
		try {
			Statement stmt = con.createStatement();	
			stmt.executeUpdate("UPDATE onderzoek SET email='"+mail+"' where onderzoekId='"+onderzoekId+"'");
						
		} catch (SQLException e) {
			System.out.println("Begeleider toewijzen gefaald: "+ e.toString());
		} 
		
	}
	
	/**
	 * FUcntie om in te schrijven voor een onderzoek
	 * @param s Student object
	 * @param o Onderzoek object
	 */
	
	public void schrijfInVoorOnderzoek(Student s, Onderzoek o){
		try{
			String email = s.getEmail();
			int oId = o.getonderzoekId();
			int verzoek = 0;
			Statement stmt = con.createStatement();
			stmt.executeUpdate("INSERT INTO groep(email, onderzoekid, verzoek) " +
					"VALUES('"+email+"', '"+oId+"', '"+verzoek+"')");
	}
		catch (Exception e){
			System.out.println("Onderzoek toevoegen gefaald reden "+ e.toString());
		}
	}
	
	public void plaatsInschrijving(Student s, Onderzoek o){
		Calendar currentDate = Calendar.getInstance();
		SimpleDateFormat formatter=  new SimpleDateFormat("YYYY-MM-DD");
		String dateNow = formatter.format(currentDate.getTime());
		//System.out.println(dateNow);
		try{
			String email = s.getEmail();
			String opleiding = s.getOpleiding();
			int oId = o.getonderzoekId();
			Statement stmt = con.createStatement();
			stmt.executeUpdate("INSERT INTO inschrijving(email, datum, onderzoekid, opleiding) " +
					"VALUES('"+email+"', '"+dateNow+"', '"+oId+"', '"+opleiding+"')");
	}
		catch (Exception e){
			System.out.println("Onderzoek toevoegen gefaald reden "+ e.toString());
		}
	}
	
	
	
	/**
	 * Fucntie om en student aan een groep toe te voegen, dit is een student die nog geen andere groepsverzoeken heeft
	 * @param s Student object
	 * @param ingelogdEmail Email van de ingelogde gebruiker
	 */
	public void voegNieuweStudentAanGroepToe(Student s, String ingelogdEmail){
		String email = s.getEmail();
		int oId = 0;
		int groepId = 0;
		int verzoek = 1;

		try{
			Statement stmt1 = con.createStatement();
			ResultSet rs1 = stmt1.executeQuery("SELECT * FROM groep where email='"+ingelogdEmail+"'");
			if(rs1.next()){
				oId = rs1.getInt("onderzoekid");
				groepId = rs1.getInt("groepid");				
			}
		}
		catch(Exception e){
			System.out.println("Onderzoekid niet opgehaald of groepid niet opgehaald "+e.toString());

		}
		try{	
			Statement stmt2 = con.createStatement();
			stmt2.executeUpdate("INSERT INTO groep(groepid, email, onderzoekid, verzoek) " +
						"VALUES('"+groepId+"','"+email+"', '"+oId+"', '"+verzoek+"')");
		}
		catch (Exception e2){
			System.out.println("Student niet toegevoegd "+ e2.toString());
		}
	}
	/**
	 * Fucntie om en student aan een groep toe te voegen
	 * @param s Student object
	 * @param ingelogdEmail Email van de ingelogde gebruiker
	 */
	public void voegStudentToeAanGroep(Student s, String ingelogdEmail){
		String email = s.getEmail();
		int groepId = 0;

		try{
			Statement stmt1 = con.createStatement();
			ResultSet rs1 = stmt1.executeQuery("SELECT * FROM groep where email='"+ingelogdEmail+"'");
			if(rs1.next()){
				groepId = rs1.getInt("groepid");
			}
		}
		catch(Exception e){
			System.out.println("Onderzoekid niet opgehaald of groepid niet opgehaald "+e.toString());

		}
		try{	
			Statement stmt2 = con.createStatement();
			stmt2.executeUpdate("UPDATE groep SET verzoek='1' where email='"+email+"' AND groepid='"+groepId+"' ");
		}
		catch (Exception e2){
			System.out.println("Student niet toegevoegd "+ e2.toString());
		}
	}
	
	/**
	 * Fucntie om de verzoeken van een student op te halen. De student kan dan zien welke groepen een verzoek gestuurd hebben
	 * @param s Student object
	 * @return ArrayList verzoeken
	 */
	public ArrayList<Groep> toonVerzoeken(Student s) {
		ArrayList<Groep> groepenlijst = new ArrayList<Groep>();
		try {
			String ingelogdEmail = s.getEmail();
			Statement stmt = con.createStatement(); 
			//gegevens ophalen van de groep
			ResultSet rs = stmt.executeQuery("SELECT * FROM groep Where email='"+ingelogdEmail+"'");
			while(rs.next()){
				int gId = (rs.getInt("groepid"));
				String email = (rs.getString("email"));
				int oId = (rs.getInt("onderzoekid"));
				int verzoek = (rs.getInt("verzoek"));
				Groep g = new Groep(gId, oId, verzoek, email);
				groepenlijst.add(g);
				}
		}
		 catch (SQLException e) {
			System.out.println("Lijst groepen ophalen gefaald.");
		}
		return groepenlijst; 
	}
	
	/** 
	 * Functie om te kijken welk onderzoek een groep doet
	 * @param g Groep object
	 * @return Onderzoek object
	 */
	public Onderzoek haalOnderzoekOp(Groep g){
		int verzochteId = g.getOnderzoekid();
		Onderzoek o = new Onderzoek(0, "", "", "", "", "", 99, 0);
		ResultSet rs;
		try {
			Statement stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT * FROM onderzoek");
			while(rs.next()){
				int oId = (rs.getInt("onderzoekid"));
				String onderwerp = (rs.getString("onderwerp"));
				String omschrijving = (rs.getString("omschrijving"));
				int status = (rs.getInt("status"));
				int aantal = (rs.getInt("aantal"));
				if(verzochteId == oId){
					String mail = (rs.getString("email"));
					String opdrachtgever = (rs.getString("opdrachtgever"));
					String richting = (rs.getString("richting"));
					o = new Onderzoek(oId, onderwerp, omschrijving, mail, opdrachtgever, richting, status, aantal);
				}
			}	

		} catch (SQLException e) {
			System.out.println("ophalen groep gefaald: "+e.toString());	
		}
		return o;
	}
	
	public String haalBegeleiderOp(Groep g){
		int verzochteId = g.getOnderzoekid();
		String begeleider = "";
		ResultSet rs;
		try {
			Statement stmt = con.createStatement();
			rs = stmt.executeQuery("SELECT * FROM onderzoek");
			while(rs.next()){
				int oId = (rs.getInt("onderzoekid"));
				if(verzochteId == oId){
					begeleider = (rs.getString("email"));
				}
			}	

		} catch (SQLException e) {
			System.out.println("ophalen groep gefaald: "+e.toString());	
		}
		return begeleider;
	}
	
	/**
	 * Fucntie om een verzoek te bevestigen
	 * @param groepId id van de betreffende groep
	 * @param mail Mail van de gebruiker
	 */
	public void bevestigVerzoek(int groepId, String mail){
		try{
			Statement stmt = con.createStatement();	
			stmt.executeUpdate("UPDATE groep SET verzoek='0' WHERE email='"+mail+"' AND groepid='"+groepId+"'");
		}
		catch(SQLException e){
			System.out.println("Bevestigen van deelname mislukt: "+e.toString());
		}
	}
	/**
	 * Functie om een verzoek af te wijzen
	 * @param groepId id van de groep die geweigerd word
	 * @param mail mail van de persoon die weigert
	 */
	
	public void weigerVerzoek(int groepId, String mail){
		try{
			Statement stmt = con.createStatement();	
			stmt.executeUpdate("DELETE FROM groep WHERE email='"+mail+"' AND groepid='"+groepId+"'");
		}
		catch(SQLException e){
			System.out.println("Weigeren van deelname mislukt, reden: "+e.toString());
		}
	}
	
	/**
	 * Fucntie die kijkt of een student al deel uitmaakt van een groep
	 * Deze functie is om te kijken of een student nog bij een andere groep kan.
	 * @param s Student object
	 * @param mail mail van gebruiker
	 * @return true/false of de gebruiker al deel uit maakt van een groep
	 */
	public boolean studentHeeftGroep(Student s, String mail){
		boolean bestaat = false;
		int gId = 0;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT groepid From groep Where email ='"+mail+"'");
			while(rs.next()){
				gId = rs.getInt("groepid");
			}
		}
		catch(SQLException e){
			System.out.println("Groepsid niet opgehaald "+e.toString());
		}
		try{
			Statement stmt1 = con.createStatement();
			ResultSet rs1 = stmt1.executeQuery("SELECT * FROM groep where groepid='"+gId+"'");
			while(rs1.next()){
				String email = (rs1.getString("email"));
				if(email.equals(s.getEmail())){
					bestaat = true;
				}
			}
		}
		catch(Exception e1){
			System.out.println("Onderzoekid niet opgehaald of groepid niet opgehaald "+e1.toString());

		}
		return bestaat;
	}
	
	/**
	 * Fucntie om te kijken of de student al deel uit maakt van een groep, als dit zo is kan hij geen nieuwe groepsverzoeken accepteren
	 * @param s Student object
	 * @return true/false of de student bezet is
	 */
	public boolean studentBezet(Student s){
		boolean bezet = false;
		int status;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT verzoek From groep Where email ='"+s.getEmail()+"'");
			while(rs.next()){
				status = rs.getInt("verzoek");
				if(status == 0){
					bezet = true;
				}
			}
		}
		catch(SQLException e){
			System.out.println("Status van student niet opgehaald, reden: "+e.toString());
		}
		return bezet;
	}
	
	/**
	 * Functie om te kijken of een groep vol is, de groep kan dan geen nieuwe leden uitnodigen
	 * @param mail Mail van de gebruiker, dit om te bepalen over welke groep het gaat.
	 * @return true/false of de groep vol is
	 */
	public boolean groepVol(String mail){
		boolean vol = false;
		int gId = 0;
		int count = 0;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT groepid FROM groep WHERE email ='"+mail+"'");
			while(rs.next()){
				gId = rs.getInt("groepid");
			}
		}
		catch(SQLException e){
			System.out.println("groepsid niet opgehaald "+e.toString());
		}
		for(Groep g : listGroepen()){
			if(g.getGroepid()==gId){
				count++;
			}
		}
		if(count>3){
			vol = true;
		}
		return vol;
	}
	
	public int telInschrijvingen(){
		int ins = 0;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT DISTINCT email FROM inschrijving");
			while(rs.next()){
				ins++;
			}
		}
		catch(SQLException e){
			System.out.println("Aantal inschrijvingen kon niet geteld worden: "+e.toString());
		}
		return ins;
	}
	
	public int telStudenten(){
		int stu = 0;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT DISTINCT email FROM student");
			while(rs.next()){
				stu++;
			}
		}
		catch(SQLException e){
			System.out.println("Aantal inschrijvingen kon niet geteld worden: "+e.toString());
		}
		return stu;
	}
	
	public int telInschrijvingenPerOpleiding(String opl, int oid){
		int inschrijvingen = 0;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT email FROM inschrijving Where opleiding ='"+opl+"' AND onderzoekid='"+oid+"' ");
			while(rs.next()){
				inschrijvingen++;
			}
		}
		catch(SQLException e){
			System.out.println("Aantal inschrijvingen kon niet geteld worden: "+e.toString());
		}
		return inschrijvingen;
	}
	
	public void bevestigInschrijving(String email, int onderzoek) {
		boolean nweGroep = false;
		int counter = 0;
		int oId = 0;
		for(Groep g: listGroepen()){
		if(g.getOnderzoekid() == onderzoek){
			//System.out.println(g.getOnderzoekid()+" "+onderzoek);
			nweGroep = true;
			oId = g.getGroepid();
			}
		}
		Calendar currentDate = Calendar.getInstance();
		SimpleDateFormat formatter=  new SimpleDateFormat("YYYY-MM-DD");
		String dateNow = formatter.format(currentDate.getTime());
		try{
			Statement stmt = con.createStatement();	
			stmt.executeUpdate("UPDATE inschrijving SET acceptdatum='"+dateNow+"' WHERE email='"+email+"' AND onderzoekid='"+onderzoek+"'");
			stmt.executeUpdate("UPDATE inschrijving SET status='1' WHERE email='"+email+"' AND onderzoekid='"+onderzoek+"'");
		}
		catch(SQLException e){
			System.out.println("Bevestigen van inschrijving mislukt: "+e.toString());
		}
		
		try{
			int verzoek = 0;
			Statement stmt = con.createStatement();
			if(nweGroep==false){
			stmt.executeUpdate("INSERT INTO groep(email, onderzoekid, verzoek) " +
					"VALUES('"+email+"', '"+onderzoek+"', '"+verzoek+"')");
			}
			else{
				stmt.executeUpdate("INSERT INTO groep(groepid, email, onderzoekid, verzoek) " +
						"VALUES('"+oId+"', '"+email+"', '"+onderzoek+"', '"+verzoek+"')");
			}
		}
		catch (Exception e){
			System.out.println("Bevestigen van inschrijving mislukt, reden: "+ e.toString());
		}
		
	}
	
	public int vrijePlaatsen(int oId){
		int plaatsen = 0;
		int bezet = 0;
		int beschikbaar = 0;
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT * FROM inschrijving where onderzoekid='"+oId+"' AND status='1'");
			while(rs.next()){
				bezet++;
			}
		}
			catch(SQLException e){
				System.out.println("Plaatsen kon niet opgehaald worden. Reden: "+e.toString());
			}
			
		try{
			Statement stmt1 = con.createStatement();
			ResultSet rs1 = stmt1.executeQuery("SELECT * FROM onderzoek where onderzoekid='"+oId+"'");
			while(rs1.next()){
				beschikbaar = rs1.getInt("aantal");
			}
		}
		catch(SQLException e){
			System.out.println("Plaatsen kon niet opgehaald worden. Reden: "+e.toString());
		}
 
		plaatsen = beschikbaar - bezet;
		return plaatsen;
	}
	
	/**
	 * Functie om de database connectie te sluiten.

	 * Deze zal steeds aan het einde van de bewerkingen aangeroepen worden.
	 */
	
	public void sluitDbVerbinding(){
		try{
		con.close();
	}
		catch(Exception e){
			System.out.println("Verbinding kon niet worden gesloten, reden: "+e.toString());
		}
	}
	//end
}
